'''
差异点	        内存	                                        硬盘
形状	    长条形，所以有内存条之称	                四四方方的，内含盘片
容量(以PC 机为例)	4G	                                    1T
功能	    存储任务管理器的进程	                    存储文档、软件等数据
运行速度	快	慢
特点	    存放 CPU 运算的数据，一旦断电数据就会消失	可以永久存储数据

'''
from io import StringIO,BytesIO
# todo StringIO
# demo1 定义一个 StringIO 对象，写入并读取其在内存中的内容
# f = StringIO()
# f.write('Python-100')
# str = f.getvalue()
# print('写入内存中的字符串为:%s' %str)
# f.write('\n') # 追加写入内容
# f.write('坚持100天')
# str = f.getvalue()  # getvalue() 可以读取到 StringIO 中的所有内容
# print('写入内存中的字符串为:\n%s' %str)
# f.close() # 释放内存中的数据，后续不可再对该 StringIO 进行内容的读写操作

# demo2  当然也可以用 read()、readline() 等来读取 StringIO 中写入的字符串
# from io import StringIO
# str = 'Python-100' + '\n' + '坚持100天'
# f = StringIO(str)
# currentStr = f.read()
# print('写入内存中的字符串为:\n%s' %currentStr)
# f.close()

# demo3
# 假设的爬虫数据输出函数 outputData()
def outputData():
    dataOne   = '我是 1 号爬虫数据\n'
    dataTwo   = '我是 2 号爬虫数据\n'
    dataThree = '我是 3 号爬虫数据'
    data = dataOne + dataTwo + dataThree
    return data

# dataStr 为爬虫数据字符串
dataStr = outputData()

# 1. 将 outputData() 函数返回的内容写入内存中
# dataIO = StringIO(dataStr)
# 1.1 输出 StringIO 在内存中写入的数据
# print('1.1内存中写入的数据为:\n%s' %dataIO.getvalue())
# 1.2 按行输出写入的数据方式一
# print('1.2按行输出写入的数据方式一:')
# for data in dataIO.readlines():
#     print(data.strip('\n')) # 去掉每行数据末尾的换行符
# 1.3 按行输出写入的数据方式二
# 由于上一步的操作，此时文件指针指向数据末尾(32)，我们需要将指针指向起始位置
# print('由于上一步操作的输出，此时文件指针位置为:%d' %dataIO.tell())
# # 将文件指针指向起始位置，方便下面的演示
# dataIO.seek(0)
# print('1.3按行输出写入的数据方式二:')
# for data in dataIO:
#     print(data.strip('\n'))

# 2. 采用 write() 的方法将字符串写入内存
dataWriteIO = StringIO()
dataWriteIO.write(dataStr)
# # 2.1 输出内存中写入的数据
# print('2.1内存中写入的数据为:\n%s' %dataWriteIO.getvalue())
# 2.2 按行输出写入的数据方式一
# 由于 write() 写入字符串后，文件指针会指向写入内容的结尾，需要将文件指针指向起始位置，否则未能输出内容
# print('2.2按行输出写入的数据方式一:')
# print('输出内容为空！')
# for data in dataWriteIO:
#     print(data.strip('\n'))
# print('输出内容为空！')

# 2.3 按行输出写入的数据方式二
# 将指针指向起始位置重新按行输出
# dataWriteIO.seek(0)
# print('2.3按行输出写入的数据方式:')
# for data in dataWriteIO.readlines():
#     print(data.strip('\n'))

# todo BytesIO
# str = 'Python-100' + '\n' + '坚持100天'
# f = BytesIO(str.encode('utf-8'))
#
# print('写入内存的字节为:%s' %f.getvalue())
# print('字节解码后内容为:\n%s' %f.getvalue().decode('utf-8'))

# 参考：https://www.cnblogs.com/minseo/p/11164921.html